#ifndef VECTOR3
#define VECTOR3

#include <iostream>

class Vector3 {
public:
	Vector3(float,float,float);
	Vector3();
	Vector3(const Vector3&);
	static float dot(Vector3, Vector3);
	static Vector3 cross(Vector3, Vector3);
	float length();
	float LengthPow2();
	static Vector3 normalize(Vector3);
	static Vector3 Mix(Vector3, Vector3, float);
	void setVector(float,float,float);
	void setVector(Vector3);
	Vector3 operator/(float);
	Vector3 operator-(Vector3);
	Vector3 operator+(Vector3);
	friend Vector3 operator*(float, Vector3);
	friend Vector3 operator*(Vector3, float);
	Vector3 operator*(Vector3);
	void operator=(Vector3);
	float operator[](int);
	static Vector3 reflect(Vector3, Vector3);
	static Vector3 GetRandomNormalizedKernel();
	float x, y, z;
private:
};

std::ostream& operator<< (std::ostream&, const Vector3);

#endif
